from flask import request, jsonify
from flask import request, jsonify, current_app
from . import api_bp

# 从current_app获取db和模型引用
def get_db_and_models():
    db = current_app.db
    Banner = current_app.Banner
    return db, Banner

# 获取轮播图列表API
@api_bp.route('/banners', methods=['GET'])
def get_banners():
    # 获取db和模型引用
    db, Banner = get_db_and_models()
    
    # 查询轮播图列表，按顺序号升序排列
    banners = Banner.query.order_by(Banner.order.asc()).all()
    
    # 格式化轮播图数据
    result = []
    for banner in banners:
        result.append({
            'id': banner.id,
            'image_url': banner.image_url,
            'link': banner.link,
            'order': banner.order
        })
    
    return jsonify({'success': True, 'data': result})

# 创建轮播图API（管理后台使用）
@api_bp.route('/banners', methods=['POST'])
def create_banner():
    # 获取db和模型引用
    db, Banner = get_db_and_models()
    
    data = request.json
    
    if not data:
        return jsonify({'success': False, 'message': '缺少轮播图数据'}), 400
    
    # 检查必要字段
    required_fields = ['image_url', 'link']
    for field in required_fields:
        if field not in data:
            return jsonify({'success': False, 'message': f'缺少{field}字段'}), 400
    
    # 创建新轮播图
    new_banner = Banner(
        image_url=data['image_url'],
        link=data['link'],
        order=data.get('order', 0)
    )
    
    db.session.add(new_banner)
    db.session.commit()
    
    return jsonify({'success': True, 'message': '轮播图创建成功', 'banner_id': new_banner.id})

# 更新轮播图API（管理后台使用）
@api_bp.route('/banners/<int:banner_id>', methods=['PUT'])
def update_banner(banner_id):
    # 获取db和模型引用
    db, Banner = get_db_and_models()
    
    data = request.json
    
    if not data:
        return jsonify({'success': False, 'message': '缺少轮播图数据'}), 400
    
    # 查询轮播图
    banner = Banner.query.get(banner_id)
    
    if not banner:
        return jsonify({'success': False, 'message': '轮播图不存在'}), 404
    
    # 更新轮播图信息
    if 'image_url' in data:
        banner.image_url = data['image_url']
    if 'link' in data:
        banner.link = data['link']
    if 'order' in data:
        banner.order = data['order']
    
    db.session.commit()
    
    return jsonify({'success': True, 'message': '轮播图更新成功'})

# 删除轮播图API（管理后台使用）
@api_bp.route('/banners/<int:banner_id>', methods=['DELETE'])
def delete_banner(banner_id):
    # 获取db和模型引用
    db, Banner = get_db_and_models()
    
    # 查询轮播图
    banner = Banner.query.get(banner_id)
    
    if not banner:
        return jsonify({'success': False, 'message': '轮播图不存在'}), 404
    
    # 删除轮播图
    db.session.delete(banner)
    db.session.commit()
    
    return jsonify({'success': True, 'message': '轮播图删除成功'})